var rd = rd || {}

// 获得随机4位16进制数
rd.ox4 = function(){ return ((Math.random() * 0x10000) | 0).toString(16);}

// 返回纯32位16进制代码串的uuid
rd.getuuid32 = function(){	
	var uuid = "";
	for(let i = 0; i < 8; i++){
		uuid += rd.ox4();
	}
	return uuid;
}

// 标准形式的 8-4-4-16 的 uuid
rd.getuuid = function(){	
	return rd.ox4() + rd.ox4() + '-' + rd.ox4() + '-' + rd.ox4() + '-' + rd.ox4() + rd.ox4() + rd.ox4() + rd.ox4() ;
}

// html 转义
rd.HTMLEncode = function(html) { 
	let temp = document.createElement ("div"); 
	(temp.textContent != null) ? (temp.textContent = html) : (temp.innerText = html); 
	let output = temp.innerHTML; 
	temp = null; 
	return output; 
} 

//HTML反转义
rd.HTMLDecode = function(text){ 
	let temp = document.createElement("div"); 
	temp.innerHTML = text; 
	let output = temp.innerText || temp.textContent; 
	temp = null; 
	return output; 
} 

// 带有target属性的button监听器，页面跳转代码实现，属性中增加blank属性时，打开新窗口
rd.buttonsListenning = function(){
	$("button[target]").click(function(){
		let url = $(this).attr("target");
		// console.log(url)
		if($(this).attr("blank")){
			window.open(url);
		}else{
			window.location.href = url;
		}
	})
}

// 获得get方式的传值结果，存放在返回值中，返回值为键值对对像。
rd.getRequest = function() {	
	let url = location.search; //获取url中"?"符后的字串	
	let rs = {};	
	if (url.indexOf("?") != -1) {	
		let str = url.substr(1);	
		strs = str.split("&");	
		for(let i = 0; i < strs.length; i ++) {	
			rs[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);	
		}	
	}	
	return rs;	
} 


// 从给定的json中对指定的字段进行滤重，
// 参数1，json对像
// 参数2，用作滤重后作为key的字段名
// 参数3，用作滤重后作为value的字段名
// 返回，一个滤重后的keyvalue健值对数组对像
// 例如： rd.distinct(json, 'username', 'userid')
// 返回： [{usernane:'张三', userid: '1'}, {usernane:'李四', userid: '2'}, ... ]
rd.distinct = function(json, keyname, valuename){
	let arr = {};
	for(let i in json){
		let x = json[i];
		arr[x[keyname]] = x[valuename]; 
	}
	return arr;
}

// 从给定的json中获得子json，子json满足条件：指定的字段项（keyname）的值等于指定值（value）
// 例如： rd.subJson(json, 'userName', '张三')
// 返回： 原json中，满足 json.userName = '张三' 的子json
rd.subJson = function(json, keyname, value){
	let obj = [];
	for(let i in json){
		if(json[i][keyname] == value){
			obj.push(json[i]);
		}
	}
	return obj;
}

// 获取指定日期前后N天的日期, N为0即当天
rd.dateAdd = function(date, n) { 
	let dd = new Date(date);
	dd.setDate(dd.getDate() + n);//获取AddDayCount天后的日期
	let y = dd.getFullYear(); 
	let m = (dd.getMonth() + 1) < 10 ? "0" + (dd.getMonth() + 1) : (dd.getMonth() + 1);//获取当前月份的日期，不足10补0
	let d = dd.getDate() < 10 ? "0" + dd.getDate() : dd.getDate();//获取当前几号，不足10补0
	return y + "-" + m + "-" + d; 
}
// 求两个日期之间的天数
rd.dateDiff = function(date1, date2){
	let firstDate = new Date(date1);
	let secondDate = new Date(date2);
	let diff = Math.abs(firstDate.getTime() - secondDate.getTime());
	let result = parseInt(diff / (1000 * 60 * 60 * 24));
	return result
}


// 检验设备内核，检验是否是移动端
rd.isMobile = function(){
	if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
		return true;
	}else{
		return false;

	}
}

// getElementById 简化
rd.getId = function(p){
	return document.getElementById(p);
}

rd.loadingPages = {}; // 用于缓存load的所有页面.
rd.navito = function(path, filename, save){	
	
	// 内置页面跳转： 
	// path：路径， 
	// filename：文件的名称，不带html
	
	let fname = path + "/" + filename;
	let kname = path.replace("/", "_") + "_" + filename;

	if( rd.loadingPages[kname] == undefined){
		$("body").load(fname + ".html", function(r){
			rd.loadingPages[kname] = r;
		})
	}else{
		$("body").html(rd.loadingPages[kname]);
	}
}


rd.clone = function(obj){
    let temp = null;
    if(obj instanceof Array){
        temp = obj.concat();
    }else if(obj instanceof Function){
        //函数是共享的是无所谓的，js也没有什么办法可以在定义后再修改函数内容
        temp = obj;
    }else{
        temp = new Object();
        for(let item in obj){
            let val = obj[item];
            temp[item] = typeof val == 'object'?rd.clone(val):val; //这里也没有判断是否为函数，因为对于函数，我们将它和一般值一样处理
        }
    }
    return temp;
}


rd.yearsList = function(from){
	let years = [];
	let Y = new Date().getFullYear();
	for(let i = Y; i >= from; i --){
		let y = {};
		y.desc = i + '年';
		y.begin = i + "-01-01";
		y.end = rd.dateAdd((i + 1) + "-01-01", -1);
		years.push(y);
	}
	// console.log(years)
	return years;
}
// 生成由当前季度往前n个季度，每个季度含名称，起止日期
rd.seasonsList = function(n){
	let seasons = [];
	let Y = new Date().getFullYear();
	let S = parseInt(new Date().getMonth() / 3) ;
	let timepoint = ["-01-01", "-04-01", "-07-01", "-10-01"];
	for(let i = 0; i < n; i++){
		let s = {};
		s.desc = Y + "年第" + (S + 1) + "季度";
		s.begin = Y + timepoint[S]
		if(S == 3){
			s.end = rd.dateAdd((Y + 1) + timepoint[0], -1);
		}else{
			s.end = rd.dateAdd(Y + timepoint[S + 1], -1);
		}
		seasons.push(s);
		S--;
		if(S < 0){
			S = 3;
			Y--;
		}
	}
	// console.log(seasons);
	return seasons;
}
// 生成由当前月份往前n个月份，每个月份含名称，起止日期
rd.monthsList = function(n){
	let months = [];
	let Y = new Date().getFullYear();
	let M = new Date().getMonth();
	for(let i = 0; i < n; i ++){
		let m = {};
		m.desc = Y + "年" + (M + 1) + "月";
		if(M + 1 > 9){
			m.begin = Y + "-" + (M + 1)+ "-01";
		}else{
			m.begin = Y + "-0" + (M + 1) + "-01";
		}
		if(M + 2 > 12){
			m.end = rd.dateAdd((Y + 1) + "-01-01", -1);
		}else if(M + 2 > 9){
			m.end = rd.dateAdd(Y + "-" + (M +2) + "-01", -1);
		}else{
			m.end = rd.dateAdd(Y + "-0" + (M + 2) + "-01", -1);
		}
		months.push(m);
		M --;
		if(M < 0){
			M = 11;
			Y --;
		}
	}
	// console.log(months);
	return months;
}
// 生成由当前周往前n个周，每周含名称，起止日期
rd.weeksList = function(n){
	let weeks = [];
	let Y = new Date().getFullYear();
	let thisSunday = rd.dateAdd(new Date(), - new Date().getDay()); // 本周的周日
	let thisMonday = rd.dateAdd(thisSunday, 1);						// 本周的周一（本周第一天）
	let yuandan = new Date().getFullYear() + "-01-01"; // 今年元旦日期
	let W = parseInt(rd.dateDiff(yuandan, thisMonday) / 7); // 本周是今年第几周（元旦到本周第一天的天数再取整）
	for(let i = 0; i < n; i ++){
		let w = {};
		
		w.desc = Y + "年第" + (W + 1) + "周";
		w.begin = rd.dateAdd(thisMonday, -(i * 7));
		w.end = rd.dateAdd(thisMonday, -(i * 7) + 6);
		weeks.push(w);
		W --;
		if(W < 0){
			W = 52;
			Y --;
		}
	}
	// console.log(weeks);
	return weeks;
}









